package com.cccyy;

import cn.hutool.core.date.ChineseDate;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class SmallSixRen {
    // 定义time_slots数组 使用List.of()方法创建一个不可变的列表
    private static final List<String> timeSlots = Arrays.asList(
            "00:00-00:59", "01:00-02:59", "03:00-04:59", "05:00-06:59",
            "07:00-08:59", "09:00-10:59", "11:00-12:59", "13:00-14:59",
            "15:00-16:59", "17:00-18:59", "19:00-20:59", "21:00-22:59",
            "23:00-23:59"
    );

    // 使用Arrays.asList创建列表（注意这个列表是不可扩展的）
    private static final List<String> timeSlotsUsingArraysAsList = Arrays.asList(
            "00:00-00:59", "01:00-02:59" // ... 其他时间槽
    );

    // 使用ArrayList创建列表，并使用Collections.unmodifiableList包装成不可变列表
    private static final List<String> timeSlotsUsingArrayList = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
            "00:00-00:59", "01:00-02:59" // ... 其他时间槽
    )));

    private static final String[] resultStr = {
            "大安", "留连", "速喜", "赤口", "小吉", "空亡"
    };
    private static final Logger log = LoggerFactory.getLogger(SmallSixRen.class);

    public static void main(String[] args) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();
        date2Lunar(currentDate);
        // 获取年、月、日
        int year = currentDate.getYear();
        int month = currentDate.getMonthValue();
        int day = currentDate.getDayOfMonth();


    }

    private static void date2Lunar(LocalDate date) {
        DateTime dateTime = DateUtil.date(date);
        // 转换为ChineseDate对象，即农历日期
        ChineseDate chineseDate = new ChineseDate(dateTime);
        // 输出农历日期
        log.info("公历 {} 对应的农历日期是：{}", dateTime, chineseDate.toString());
        // 还可以分别获取农历的年、月、日等信息
        int lunarYear = chineseDate.getChineseYear();
        int month = chineseDate.getMonth();
        int day = chineseDate.getDay();
        String lunarMonth = chineseDate.getChineseMonth();
        String lunarDay = chineseDate.getChineseDay();

        log.info("农历年份: {}", lunarYear);
        log.info("农历月份: {}", lunarMonth);
        log.info("农历日期: {}", lunarDay);
        log.info("农历月份: {}", month);
        log.info("农历日期: {}", day);

        // 获取时间范围，获取对应时辰的索引值
        LocalTime currentTime = LocalTime.now();
        int timeIndex = findCurrentTimeSlotIndex(currentTime);

        int monthIndex = (month - 1) % 6;
        int dayIndex = (monthIndex + day - 1) % 6;
        int hourIndex = (dayIndex + timeIndex) % 6;
        String result = resultStr[hourIndex];
        getInfo(result);
    }

    /**
     * 匹配时间所在范围，返回对应索引值
     *
     * @param
     * @return
     */
    public static int findCurrentTimeSlotIndex(LocalTime currentTime) {
        // 格式化当前时间以匹配时间槽的格式（HH:mm）
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
        String currentTimeStr = currentTime.format(formatter);

        // 遍历时间槽列表
        for (int i = 0; i < timeSlots.size(); i++) {
            String slot = timeSlots.get(i);
            // 假设时间槽格式为"HH:mm-HH:mm"，我们需要拆分它
            String[] startEnd = slot.split("-");
            if (startEnd.length != 2) {
                // 如果格式不正确，可以抛出异常或跳过该时间槽
                continue;
            }

            // 将字符串转换为LocalTime对象进行比较
            LocalTime startTime = LocalTime.parse(startEnd[0], formatter);
            LocalTime endTime = LocalTime.parse(startEnd[1], formatter);

            // 检查当前时间是否在该时间槽内
            if (!currentTime.isBefore(startTime) && currentTime.isBefore(endTime)) {
                // 如果在，返回索引
                return i;
            }
        }
        // 如果没有找到匹配的时间槽，返回-1或其他适当的值
        return -1;
    }

    private static void getInfo(String result) {
        if ("大安".equals(result)) {
            // 这里直接打印在控制台中
            log.info("解释一");
            log.info("【大安】身不动时，五行属木，颜色青色，方位东方，临青龙，谋事主一、五、七，有静止、心安、吉祥之含义。\\n【诀曰】大安事事昌，求谋在东方，失物去不远，宅舍保平安，行人身未动，病者主无妨，将军回田野，仔细更推详，丢失在附近，可能西南向，安居得吉日，不可动身祥，办事别出屋，求借邀自房，得病凶化吉，久疾得安康，寻人知音信，可能归村庄，口舌能消散，远行要提防，交易别出村，仔细与推详，求财有八分，得全不出房。");
            log.info("解释二");
            log.info("【大安】大安事事昌，求财在坤方，失物去不远，宅舍保安康。\\n\\n【断曰】行人身未动，病者主无妨，将军回田野，仔细更推详（大安，身不动，属木，青龙，谋事一五七）。");
            log.info("解释三");
            log.info("【大安】大安事安昌，求财在坤方，失物去不远，宅舍保安康，行人身未动，病者主无妨，将军回田野，仔细更推详。\\n【又云】生时落大安主庙神，重逢乃真童子，老病逢危怕大安，名日归庙堂。\\n【另注】再又主官贵，贵人平稳，身命逢大安，无克主有官职，出行逢之非有阻止，既定强动，占病是肝胆之病头顶病，有静止、心安、吉祥之含义。");
            log.info("解释四");
            log.info("【大安】大安事安昌，求财在坤方，失物去不远，宅舍保安康，行人身未动，病者主无妨，将军回田野，仔细更推详。\\n大安身不动，属木青龙，谋事一五七。\\n【注】大安大吉，百事可为，凡事可成，成数5、3、8，必得财，中考，晋升，赢，胜，北，金西。");
            log.info("解释五");
            log.info("【大安】安泰、平稳之意；安乐、亨通，顺从人意；对应壬子，相当于地天泰的卦意。");
            log.info("解释六");
            log.info("【大安青龙】正大光明，安然有利，有君子贤人之义。");
            log.info("详解");
            log.info("【大安】身不动时，五行属木，颜色青色，方位东方。临青龙，凡谋事主一、五、七(寅巳申)。有静止、心安。吉祥之含义。\\n【诀曰】大安事事昌，求财在坤方，失物去不远，宅舍保安康，行人身未动，病者主无妨。将军回田野，仔细与推详，丢失在附近，可能西南向，安居得吉日，不可动身祥。办事别出屋，求借邀自房，得病凶化吉，久疾得安康，寻人知音信，可能归村庄。口舌能消散，远行要提防，交易别出村，离屯细推详，求财有八分，得全不出房。");
        } else if ("留连".equals(result)) {
            log.info("解释一");
            log.info("【留连】人未归时，五行属水，颜色黑色，方位北方，临玄武，凡谋事主二、八、十，有喑味不明、延迟、纠缠、拖延、漫长之含义。\\n\\n【诀曰】留连事难成，求谋日未明，官事只宜缓，去者来回程，失物南方见，急讨方遂心，更需防口舌，人事且平平。");
            log.info("解释二");
            log.info("【留连】留连事难成，求谋日未明，官事只宜缓，去者未回程。\n\n【断曰】失物南方见，急讨方趁心，更须防口舌，人口且平平（留连，卒未归，属水玄武，谋事二八十）。");
            log.info("解释三");
            log.info("【留连】留连事难成，求谋日未明，官事只宜缓，去者未回程，失物南方见，急讨方趁心，更须防口舌，人口只平平。\n【又云】生时逢之主家仙，重逢乃弟子，逢赤口乃堂仙。\n【另注】身命逢之日身生乃是武职之人，恋爱逢之事不成，欲罢不能缠绵之象，占病为溃疡肠胃之病昏迷，主病不能去根，虚病为阴人或草仙多为家中，有喑味不明、延迟、纠缠、拖延、漫长之含义。");
            log.info("解释四");
            log.info("【留连】留连事难成，求谋日未明，官事只宜缓，去者未回程，失物南方见，急讨方趁心，更须防口舌，人口只平平。\n留连卒未归，属水玄武，谋事二八十。\n【注】流连中凶，大事不可为，大事不成，忌数1、6、7，可能会破财，败，输，免职，东北，土。");
            log.info("解释五");
            log.info("【留连】迟钝、纠葛、麻烦；对应壬戍，像未济卦、噬嗑卦，不通顺。");
            log.info("解释六");
            log.info("【留连勾陈】滞留受阻，纠扯牵连，拖延受累，争讼怪异。");
            log.info("详解");
            log.info("【留连】人未归时，五行属水，颜色黑色，方位北方，临玄武，凡谋事主二、八、十(卯午子)。有喑味不明，延迟。纠缠、拖延之含义。\n【诀曰】留连事未当，求事日莫光，凡事只宜缓，去者未回向，失物南方去，急急行便访。紧记防口舌，人口且平祥，丢失难寻找，窃者又转场，出行定不归，久去拖延长。办事不果断，牵连又返往，求借不易成，被求而彷徨，此日患疾病，几天不复康。找人迷雾中，迷迷又恍惚，口舌继续有，拖拉又伸长，女方嫁吉日，求财六分量。");
        } else if ("速喜".equals(result)) {
            log.info("解释一");
            log.info("【速喜】人即至时，五行属火，颜色红色方位南方，临朱雀，谋事主三，六，九，有快速、喜庆、吉利之含义，指时机已到。\n\n【诀曰】速喜喜来临，求财向南行，失物申未午(南或西南)，逢人路上寻，官事有福德，病者无祸侵，田宅六畜吉，行人有音信。");
            log.info("解释二");
            log.info("【速喜】速喜喜来临，求财向南行，失物申午未，逢人路上寻。\n\n【断曰】官事有福德，病者无祸侵，田宅六畜吉，行人有信音（速喜，人便至，属火，朱雀，谋事三六九）。");
            log.info("解释三");
            log.info("【速喜】速喜喜来临，求财向南行，失物申午未，逢人路上寻，官事有福德，病者无祸侵，田宅六蓄吉，行人有信音。\n【又云】虚病有家女，老病突发怕速喜名劫满，生时逢之重者，乃有车前马后关。\n【另注】占身命主有文印，占病为虚火上炎或外烧烫伤，久病必是心疾，虚病为家中女鬼宜南或西方祭送还愿，有快速、喜庆、吉利之含义，指时机已到。");
            log.info("解释四");
            log.info("【速喜】速喜喜来临，求财向南行，失物申午未，逢人路上寻，官事有福德，病者无祸侵，田宅六蓄吉，行人有信音。\n速喜人便至，属火朱雀，谋事三六九。\n【注】速喜中吉，大事可为，大事可成，成数3、7、1、0，可能会胜，得财，中考，晋升，赢西北，金。");
            log.info("解释五");
            log.info("【速喜】喜讯、喜事；速度快，马上就能应验；对应壬辰，相当于火天大有卦，外加世临青龙。");
            log.info("解释六");
            log.info("【速喜朱雀】速喜有财，一帆风顺，文章有成，信物有准。");
            log.info("详解");
            log.info("【速喜】人即至时，五行属火，颜色红色方位南方，临朱雀，谋事主三，六，九(辰戌未)。有快速、喜庆，吉利含义，时机已到。\n【诀曰】速喜喜临乡，求财往南方，失物申午未，逢人路寻详，官事有福德，病者无大伤。六畜田稼庆，行人有音向，丢失得音信，微乐在面上，出行遇吉利，小喜而顺当。办事如逢春，吉利又荣光，小量可求借，大事难全强，久病见小愈，得病速回康，寻人得知见，口舌见消亡，交易可得成，但不太久长，求财有十分，吉时得顺当。");
        } else if ("赤口".equals(result)) {
            log.info("解释一");
            log.info("【赤口】官事凶时，五行属金，颜色白色，方位西方，临白虎，谋事主四、七，十，有不吉、惊恐，凶险、口舌是非之含义。\n\n【诀曰】赤口主口舌，官非切要防，失物急去寻，行人有惊慌，鸡犬多作怪，病者出西方，更须防咀咒，恐怕染瘟殃。");
            log.info("解释二");
            log.info("【赤口】赤口主口舌，是非要紧防，失物速速讨，行人有惊慌。\n\n【断曰】六畜多作怪，病者出西方，更须防咒嘴，诚恐染瘟肓（赤口，官事凶，属金，白虎，谋事四七十）。");
            log.info("解释三");
            log.info("【赤口】赤口主口舌，官非切要防，失物速速讨，行人有惊慌，六畜多作怪，病者出西方，更须防诅咒，诚恐染瘟肓。\n【又云】赤口主有狐黄长仙作怪，或路上冲撞恶邪，又主占寿与急病者怕赤口，生时重逢者犯五鬼夜行类。\n白虎关家堂不安，有宿怨未还存外男鬼，有不吉、惊恐、凶险、口舌是非之含义。");
            log.info("解释四");
            log.info("【赤口】赤口主口舌，官非切要防，失物速速讨，行人有惊慌，六畜多作怪，病者出西方，更须防诅咒，诚恐染瘟肓。\n赤口官事凶，属金白虎，谋事四七十。\n【注】赤口小凶，小事不可为，小事不成，忌数3、7、9，小有失败，破财，下降，失误。");
            log.info("解释五");
            log.info("【赤口】赤为红色，如老虎张开血盆大口，凶事、伤、亡；相当于雷泽归妹卦，外加世坐白虎，对应壬申。");
            log.info("解释六");
            log.info("【赤口白虎】赤口为毒，白虎为丧，招是非，逢灾星，受辛劳。");
            log.info("详解");
            log.info("【赤口】官事凶时，五行属金，颜色白色，方位西方，临白虎，谋事主四、七，十。有不吉、惊恐，凶险、口舌是非之含义。\n【诀曰】赤口主口伤，官事且紧防，失物急去找，行人有惊慌，鸡犬多作怪，病者上西方。更须防咒咀，恐怕染瘟殃，找物犯谎口，寻问无音向，出门千口怨，言谈万骂伤。办事犯口舌，难成有阻挡，求借不全顺，闭口无事张，得病千口猜，求医还无妨。寻人得凶音，人心不安详，口舌犯最重，交易口舌防，求财只四分，逢吉才成当。");
        } else if ("小吉".equals(result)) {
            log.info("解释一");
            log.info("【小吉】人来喜时，五行属木，临六合，凡谋事主一、五、七，有和合、吉利之含义。\n\n【诀曰】小吉最吉昌，路上好商量，阴人来报喜。失物在坤方(西南)，行人立便至，交易甚是强，凡事皆和合，病者祈上苍。");
            log.info("解释二");
            log.info("【小吉】小吉最吉昌，路上好商量，阴人来报喜，失物在坤方。\n\n【断曰】行人即便至，交关甚是强，凡事皆合和，病者叩穹苍（小吉，人来喜，属水，六合，谋事一五七）。");
            log.info("解释三");
            log.info("【小吉】小吉最吉昌，路上好商量，阴人来报喜，失物在坤方，行人即便至，交关甚是强，凡事街合和，病者叩穹苍。\n【又云】小吉主五鬼病邪，又主外女鬼宜祭送吉，生时重逢者，主犯水火关宜禳解，有和合、吉利之含义。");
            log.info("解释四");
            log.info("【小吉】小吉最吉昌，路上好商量，阴人来报喜，失物在坤方，行人即便至，交关甚是强，凡事街合和，病者叩穹苍。\n小吉人来喜，属水六合，谋事一五七。\n【注】小吉小吉，小事可为，小事可成，成数2、6、9，小胜，小得财，小赢，小成。");
            log.info("解释五");
            log.info("【小吉】吉事、喜事、事隧人意；对应壬寅，相当于地风升，水风井卦，通畅。");
            log.info("解释六");
            log.info("【小吉六合】六合为善，四方称心，遇贵人。");
            log.info("详解");
            log.info("【小吉】人来喜时，五行属木，临六合，凡谋事主一、五、七。有和合、吉利之含义。\n【诀曰】小吉最吉昌，路上好商量，阴人来报喜，失物在坤方，行人立刻至，交易甚是强。凡事皆合好，病者保安康，大吉又大顺，万事如意详，出行可得喜，千里吉安详。诸事可心顺，有忧皆消光，求借自来助，众友愿相帮，重病莫要愁，久病得安康。不见得相见，不打自归庄，千人称赞君，无限上荣光，交易成兴隆，十二分财量。");
        } else if ("空亡".equals(result)) {
            log.info("解释一");
            log.info("【空亡】音信稀时，五行属土，颜色黄色，方位中央，临勾陈，谋事主三、六、九，有不吉、无结果、忧虑之含义。\n\n【诀曰】空亡事不禅，阴人多乖张，求财无利益，行人有灾殃，失物寻不见，官事有刑伤，病人逢暗鬼，析解可安康。");
            log.info("解释二");
            log.info("【空亡】空亡事不祥，阴人少乖张，求财无利益，行人有灾殃。\n\n【断曰】失物寻不见，官事有刑伤，病人逢暗鬼，解禳保平安（空亡，音信稀，属土，勾陈，谋事三六九）。");
            log.info("解释三");
            log.info("【空亡】空亡事不祥，阴人少乖张，求财无利益，行人有灾殃，失物寻不见，官事有刑伤，病人逢暗鬼，解禳保平安。\n【又云】病邪主冲撞六煞红白煞，鬼乃家男，少病怕空亡名击仵，生时重逢主关口重重，有不吉、无结果、忧虑之含义。\n【另注】有占人行年，先用其人生日的月，再用其日然后在顺数起年龄。");
            log.info("解释四");
            log.info("【空亡】空亡事不祥，阴人少乖张，求财无利益，行人有灾殃，失物寻不见，官事有刑伤，病人逢暗鬼，解禳保平安。\n空亡音信稀，属土勾陈，谋事三六九。\n【注】空亡大凶，百事不可为，凡事不成，忌数4、6、8，必破财，必败，必衰，撤职，下降，牢狱之灾。");
            log.info("解释五");
            log.info("【空亡】事情落空，所欲为幻想，事不可为；对应壬午，相当于世应空亡卦。");
            log.info("解释六");
            log.info("【空亡玄武】空则虚，亡则失，犯阴贼小人，匪盗惊惶，惊疑扰乱。");
            log.info("详解");
            log.info("【空亡】音信稀时，五行属土，颜色黄色，方位中央；临勾陈。谋事主三、六、九(辰未丑)。有不吉、无结果、忧虑之含义。\n【诀曰】空亡事不长，阴人无主张，求财心白费，行人有灾殃，失物永不见，官事有刑伤。病人遇邪鬼，久病添祸殃，失物难找见，找寻空荡荡，出行不吉利，凶多不吉祥。办事凶为多，处处有阻挡，求借不能成，成事化败伤，得病凶多噩，久患雪加霜。寻人无音信，知音变空想，万口都诽骂，小舟遭狂浪，求财有二分，不吉不利亡。");
        }
    }
}
